home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / rpg / crossfir.001 / crossfir~ / eutl / tcplib / connect.c next >
C/C++ Source or Header  |  1994-10-15  |  3KB  |  133 lines

  1. #include <stdio.h>
  2. #include "tcplib.h"
  3. #include "xmalloc.h"
  4. #include "timelib.h"
  5.  
  6. const int port=8855;
  7.  
  8. void Send(int npackets,int rmin,int rmax)
  9. {
  10.   int l,s;
  11.   char *buf;
  12.   TcpSocket conn;
  13.  
  14.   buf = xmalloc(rmax);
  15.  
  16.   conn = GetConnection(NULL,port);
  17.   TcpLibBufferOutput(conn,1);
  18.   srandom(time(NULL)>>1 ^ getpid()<<3);
  19.   for(l=0;l<npackets;l++) {
  20.     s = random()%(rmin-rmax+1)+rmin;
  21. /*    printf("Send %d\n",l);*/
  22.     SendSizedMsg(conn,buf,s);
  23. /* Depend on automatic flushing */
  24.   }
  25.   TcpLibFlush(conn);
  26.   exit(0);
  27. }
  28.   
  29. void Server(int port)
  30. {
  31.   TcpSocket *conns;
  32.   int conncount = 2;
  33.   int i,j;
  34.  
  35.   conns = xmalloc(sizeof(TcpSocket)*2);
  36.   conns[0] = MakeForeignFDConnection(fileno(stdin));
  37.   conns[1] = BecomeServer(port);
  38.   
  39.   printf("Type quit to quit\n");
  40.   while(1) {
  41.     WaitForInput(conns,conncount,TCPLIB_FOREVER);
  42.     if (HasInput(conns[0])) {
  43.       char buf[100];
  44.       fgets(buf,100,stdin);
  45.       if (strcmp(buf,"quit\n")==0) {
  46.     exit(0);
  47.       }
  48.       for(i=2;i<conncount;i++)
  49.     SendString(conns[i],buf);
  50.     }
  51.     if (HasInput(conns[1])) {
  52.       printf("Accepting Connection\n");
  53.       conncount++;
  54.       conns = xrealloc(conns,sizeof(TcpSocket)*conncount);
  55.       conns[conncount-1] = AcceptConnection(conns[1],NULL);
  56.     } 
  57.     for(i=2;i<conncount;i++) {
  58.       if (HasInput(conns[i])) {
  59.         WITH_HANDLING {
  60.           char *buf;
  61.       buf = GetString(conns[i]);
  62.       printf("%s",buf);
  63.         } HANDLE {
  64.           BEGIN_MATCH;
  65.           XMATCH(tcplib,NothingRead) {
  66.             printf("Connection %d dropped\n",i);
  67.             conncount--;
  68.             for(j=i;j<conncount;j++)
  69.               conns[j] = conns[j+1];
  70.             i--;
  71.           }
  72.           XMATCH(tcplib,ReadError) {
  73.             printf("Connection %d dropped\n",i);
  74.             conncount--;
  75.             for(j=i;j<conncount;j++)
  76.               conns[j] = conns[j+1];
  77.             i--;
  78.           }         
  79.           END_MATCH;
  80.         }
  81.         END_HANDLING;
  82.       }
  83.     }
  84.   }
  85. }
  86.  
  87. void Client(char *server,int port)
  88. {
  89.   TcpSocket conns[2];
  90.  
  91.   conns[0] = MakeForeignFDConnection(fileno(stdin));
  92.   conns[1] = GetConnection(server,port);
  93.   printf("Type quit to quit\n");
  94.   while(1) {
  95.     WaitForInput(conns,2,TCPLIB_FOREVER);
  96.     if (HasInput(conns[0])) {
  97.       char buf[100];
  98.       fgets(buf,100,stdin);
  99.       if (strcmp(buf,"quit\n")==0) {
  100.     exit(0);
  101.       }
  102.       SendString(conns[1],buf);
  103.     }
  104.     if (HasInput(conns[1])) {
  105.       char *buf;
  106.       buf = GetString(conns[1]);
  107.       printf("%s",buf);
  108.     }
  109.   }
  110. }
  111.  
  112.     
  113. main(int argc,char *argv[])
  114. {
  115.   char *server;
  116.   int port;
  117.   if ((argc != 3)) {
  118.     printf("Usage: %s (host|-s) port\n-s causes a server to be created\n",
  119.        argv[0]);
  120.     exit(1);
  121.   }
  122.   server = argv[1];
  123.   port = atoi(argv[2]);
  124.  
  125.   if (strcmp(server,"-s")==0) {
  126.     Server(port);
  127.   } else {
  128.     Client(server,port);
  129.   }
  130.   exit(0);
  131. }
  132.  
  133.